<?php
/**
 * @file
 * "Callbacks" para la administración de los periodos de pre-registro
 */


/**
 * @param $accion Acción que el usuario desea hacer, los valores posibles son:
 *                crear, editar o listar. Las tareas que cumple cada valor son:
 *
 *                crear:  Crea un nuevo periodo de pre-registro.
 * 
 *                editar: Permite la edición de los datos del periodo actual, es decir, 
 *                        del último periodo creado.
 *				
 *				  actual: Muestra la información del periodo actual
 * 
 *                listar: Muestra la información de todos los periodos anteriores al actual.
 * 
 * @return Cadena de texto con el código HTML que se mostrará en el explorador.
 */
function periodos_admin($accion = null)
{
    /* ejecuta una acción, dependiendo del valor de la variable */    
    switch($accion)
    {
        /* creación de una nuevo periodo */
        case 'crear':    $salida = drupal_get_form('formulario_periodo', "crear");
                         break;

        /* editar la información del periodo actual */
        case 'editar':   $salida = drupal_get_form('formulario_periodo', $id_periodo);
                         break;

						 
		/* Mostrar la información del periodo actual */
        case 'actual':   $salida = drupal_get_form('formulario_periodoactual', $id_periodo);
                         break;
        
		/* lista todos los periodos */
        case 'listar':   $salida = drupal_get_form('periodos_lista_admin');
                         break;

        /* acciones por defecto */
        default:       $salida = "";
    }
    
    /* regresa código HTML */
    return $salida;
}


/**
 * Formulario de configuración del periodo pre-registro  
 *
 * @ingroup forms
 * 
 * @param $form_id 
 * @param $id_periodo Esta variable contiene el id del periodo a manejar, si se crea un nuevo periodo no debe recibir un valor numérico
 * @return Cadena de texto con el código HTML que se mostrará en el explorador.
 * 
 * @see formulario_periodo_validate()
 * @see formulario_periodo_submit()
 */
function formulario_periodo($form_id,$id_periodo = null)
{
	$reg_total = "SELECT COUNT(*) FROM (periodos)";
	
	if(is_numeric($reg_total))
	{/*Editar el periodo existente*/
		/*Recupera los datos de una periodo de la base de datos*/
		
	
		$sql = "SELECT trimestre , fecha_inicial , fecha_final, horas_periodo, creditos_comp, creditos_div, creditos_maxtrim FROM (periodos) WHERE periodos.id_periodo = ($reg_total) ";
	
		$resultado = db_query($sql, $reg_total);
		$valores = db_fetch_array($resultado);
		
		drupal_set_message($valores['trimestre']);
		
		
	}
	
	else 
	{
	/*Cuando se desea crear un nuevo periodo*/
			$valores = array
			(
				'trimestreN' => "",
				'trimestre' => "",
				'fechainicial' => "",
				'fechafinal' => "",
				'horasPeriodo' => 0,
				'creditosComputacion' => 0,
				'creditosOtraDivision' => 0,
				'creditosMaxTrim' => 0
			);
	}
	
	/*Elemento que contiene el número de trimestre del periodo*/
	$formulario['trimestreN'] = array
	(
		'#required' => true,
        '#title' => "Trimestre",
        '#type' => 'textfield',
		'#size' => 3,
		'#maxlength' => 2
	);
	

	/*Elemento que contiene la letra del trimestre del periodo*/
	$trimestre = array
	(
		'I' => "I",
		'P' => "P",
		'O' => "O",
	);
      

	$formulario['trimestre'] = array
	(
		'#description' => "Trimestre de pre-registro (ejemplo: 08 I) ",
        '#default_value' => $valores['trimestre'],
        '#options' => $trimestre,
        '#required' => true,
        '#type' => 'select'
	);
      
      
    
    /*Elemento que contiene la fecha inicial del periodo*/
	$formulario['fechainicial'] = array
	(
    	'#description' => "Fecha inicial de pre-registro",
        '#type' => 'date', 
    	'#title' => "Fecha inicial", 
    	'#required' => true
	);


	/*Elemento que contiene la fecha final del periodo*/
	$formulario['fechafinal'] = array
	(
    	'#description' => "Fecha final de pre-registro",
        '#type' => 'date', 
    	'#title' => "Fecha final", 
    	'#required' => true
	);
  
    
	/*Elemento que contiene el número de horas que existe para elegir una UEA entre un intervalo y otro*/
	$formulario['horasPeriodo'] = array
	(
        '#description' => "horas por periodo entre una selección y otra",
        '#required' => true,
		'#default_value' => $valores['horasPeriodo'],
        '#title' => "Horas por periodo",
        '#type' => 'textfield',
		'#size' => 2,
		'#maxlength' => 1
	);
	
	
	/*Elemento que contiene el número de créditos límite por trimestre para la licenciatura en computación*/
	$formulario['creditosComputacion'] = array
	(
        '#description' => "límite de créditos por trimestre para la licenciatura en computación",
        '#required' => true,
		'#default_value' => $valores['creditosComputacion'],
        '#title' => "Límite de créditos (Computación)",
        '#type' => 'textfield',
		'#size' => 3,
		'#maxlength' => 2
	);


	/*Elemento que contiene el número de créditos límite por trimestre para otra división*/
	$formulario['creditosOtraDivision'] = array
	(
		'#description' => "límite de créditos para UEAs de otra división",
		'#required' => true,
		'#default_value' => $valores['creditosOtraDivision'],
		'#title' => "Límite de créditos (Otra división)",
		'#type' => 'textfield',
		'#size' => 3,
		'#maxlength' => 2
	);


    /*Elemento que contiene el número de créditos máximo por trimestre*/
	$formulario['creditosMaxTrim'] = array
	(
		'#description' => "límite de créditos total por trimestre",
		'#required' => true,
		'#default_value' => $valores['creditosMaxTrim'],
		'#title' => "Límite total de créditos (Por trimestre)",
		'#type' => 'textfield',
		'#size' => 3,
		'#maxlength' => 2
	);

    /*Boton de enviar*/  
	$formulario['enviar'] = array
	(
    	'#type' => 'submit',
    	'#value' => "Enviar"
	);
    
	
	return $formulario;

}

/**
 * Formulario que muestra el periodo actual   
 *
 * @ingroup forms
 * 
 * @param $form_id 
 * @param $id_periodo Esta variable contiene el id del periodo a mostrar
 * @return Cadena de texto con el código HTML que se mostrará en el explorador.
 * 
 * @see formulario_periodoactual_validate()
 * @see formulario_periodoactual_submit()
 */
  function formulario_periodoactual($form_id,$id_periodo = null)
{

	$reg_total = "SELECT COUNT(*) FROM (periodos)";
	
	$sql = "SELECT trimestre , fecha_inicial , fecha_final, horas_periodo, creditos_comp, creditos_div, creditos_maxtrim FROM (periodos) WHERE periodos.id_periodo = ($reg_total) ";
	
	$resultado = db_query($sql, $reg_total);
	$valores = db_fetch_array($resultado);
	
		
	/*Elemento que contiene el número de trimestre del periodo*/
	$formulario['trimestreN'] = array
	(
		'#required' => true,
        '#title' => "Trimestre",
		'#description' => " ".$valores['trimestre'],
        '#type' => 'fieldset',
	);
	
   
    
    /*Elemento que contiene la fecha inicial del periodo*/
	$formulario['fechainicial'] = array
	(
    	'#description' => " ".$valores['fecha_inicial'],
        '#type' => 'fieldset', 
    	'#title' => "Fecha inicial", 
    	'#required' => true
	);


	/*Elemento que contiene la fecha final del periodo*/
	$formulario['fechafinal'] = array
	(
    	'#description' => " ".$valores['fecha_final'],
        '#type' => 'fieldset', 
    	'#title' => "Fecha final", 
    	'#required' => true
	);
  
    
	/*Elemento que contiene el número de horas que existe para elegir una UEA entre un intervalo y otro*/
	$formulario['horasPeriodo'] = array
	(
        '#description' => " ".$valores['horas_periodo'],
        '#required' => true,
		'#title' => "Horas por periodo",
        '#type' => 'fieldset'
		
	);
	
	
	/*Elemento que contiene el número de créditos límite por trimestre para la licenciatura en computación*/
	$formulario['creditosComputacion'] = array
	(
        '#description' => " ".$valores['creditos_comp'],
        '#required' => true,
		'#title' => "Límite de créditos (Computación)",
        '#type' => 'fieldset'
	);


	/*Elemento que contiene el número de créditos límite por trimestre para otra división*/
	$formulario['creditosOtraDivision'] = array
	(
		'#description' => " ".$valores['creditos_div'],
		'#required' => true,
		'#title' => "Límite de créditos (Otra división)",
		'#type' => 'fieldset'
	);

	
	
    /*Elemento que contiene el número de créditos máximo por trimestre*/
	$formulario['creditosMaxTrim'] = array
	(
		'#description' => " ".$valores['creditos_maxtrim'],
		'#required' => true,
		'#title' => "Límite total de créditos (Por trimestre)",
		'#type' => 'fieldset'		
	);

    /*Boton de enviar*/  
	$formulario['Editar'] = array
	(
    	'#type' => 'submit',
    	'#value' => "Editar"
	);
	                         
    
	return $formulario;

}
 

/**
 * -
 * 
 * @param $id
 * @param $formulario
 */
function formulario_periodo_validate($id, &$formulario)
{

    if(!(is_numeric($formulario['values']['trimestreN'])))
			form_set_error('trimestreN', "Trimestre debe ser númerico");
			
	if(!(is_numeric($formulario['values']['horasPeriodo'])))
			form_set_error('horasPeriodo', "Las horas del periodo deben ser flotantes");	
    
    if(!(is_numeric($formulario['values']['creditosComputacion'])))
			form_set_error('creditosComputacion', "El Límite de créditos (Computación) debe ser númerico");
	
    if(!(is_numeric($formulario['values']['creditosOtraDivision'])))
			form_set_error('creditosOtraDivision', "El límite de créditos (Otra división) debe ser númerico");

	if(!(is_numeric($formulario['values']['creditosMaxTrim'])))
			form_set_error('creditosMaxTrim', "El límite total de créditos (Por trimestre) debe ser númerico ");

}


/**
 * -
 * 
 * @param $id
 * @param $formulario
 */
function formulario_periodo_submit($id, &$formulario)
{
      $trimestre=$formulario['values']['trimestreN'].$formulario['values']['trimestre'];  

      $inicial=$formulario['values']['fechainicial'];
      $dia=$inicial['day'];
      if($inicial['day']<10)
         $dia='0'.$inicial['day'];
      $fechainicial=$inicial['month'].$dia.$inicial['year'];
                 
      $final=$formulario['values']['fechafinal'];
      $dia=$final['day'];
      if($ifinal['day']<10)
         $dia='0'.$final['day'];
      $fechafinal=$final['month'].$dia.$final['year'];
      
      $horasperiodo=$formulario['values']['horasPeriodo'];
      
      $creditosComputacion=$formulario['values']['creditosComputacion'];
      $creditosOtraDivision=$formulario['values']['creditosOtraDivision'];
      $creditosMaxTrim=$formulario['values']['creditosMaxTrim'];
       
      $sql ="INSERT INTO periodos VALUES (null,'$trimestre',$fechainicial,$fechafinal,$horasperiodo,$creditosComputacion,$creditosOtraDivision,$creditosMaxTrim)";
      db_query($sql);
}


function formulario_periodoactual_submit($id, &$formulario)
{
    return drupal_goto('admin/sph/periodos/$periodo->id/editar');
}

/**
 * Enlista los periodos anteriores
 * 
 * @ingroup forms
 * @see theme_periodos_lista_admin()
 */
function periodos_lista_admin()
{
    /* cabecera de la tabla */
    $cabecera = array
    (
        theme('table_select_header_cell'),
        array('data' => "Trimestre", 'field' => 'trimestre'),
        array('data' => "Fecha inicial", 'field' => 'fecha_inicial'),
        array('data' => "Fecha final", 'field' => 'fecha_final')
    );
    
    /* formulario que muestra los periodos */
    $form = array();
    
    /* número de periodos por página */
    $num_pag = 20;

    /* número total de periodos */
    $reg_total = "SELECT COUNT(*) FROM {periodos}";

    /* todos los periodos en la base de datos */
    $sql = "SELECT trimestre , fecha_inicial , fecha_final FROM {periodos}  ";
    
    $sql .= tablesort_sql($cabecera);

    /* consulta a la base de datos con paginación */
    $_periodos = pager_query($sql, $num_pag, 0, $reg_total);

    /* todos los periodos */
    $periodos = array();
    
   /* crea cada uno de los elementos del formualio */
    while($periodo = db_fetch_object($_periodos))
    {
        $periodos[$periodo->trimestre] = '';
        $form['trimestre'][$periodo->trimestre] = array('#value' => $periodo->trimestre);
		$form['fecha_inicial'][$periodo->trimestre] = array('#value' => $periodo->fecha_inicial);
		$form['fecha_final'][$periodo->trimestre] = array('#value' => $periodo->fecha_final);
    }
    
    $form['paginador'] = array('#value' => theme('pager', NULL, $num_pag, 0));

    return $form;
}




/**
 * Diseño de los elementos del formulario que enlista los periodos.
 *
 * @ingroup themeable
 *
 * 
 * @param $form
 * @return .
 */
function theme_periodos_lista_admin($form)
{
    /* cabecera de la tabla */
    $cabecera = array
    (
        theme('table_select_header_cell'),
        array('data' => "Trimestre", 'field' => 'trimestre'),
        array('data' => "Fecha inicial", 'field' => 'fecha_inicial'),
        array('data' => "Fecha final", 'field' => 'fecha_final')
    );
    
    $salida = drupal_render($form['options']);

    if(isset($form['trimestre']) && is_array($form['trimestre']))
    {
        /* recorre cada uno de los registros (cada uno de los periodos) */
        foreach(element_children($form['trimestre']) as $key)
        {
            /* cada conjunto de datos de un periodo forma una columna de la tabla */
            $columnas[] = array
            (	
                drupal_render($form['periodos'][$key]),
            	drupal_render($form['trimestre'][$key]),
                drupal_render($form['fecha_inicial'][$key]),
                drupal_render($form['fecha_final'][$key]),
            );
        }
    }
    /* mensaje mostrado cuando no hay periodos en la BD */
    else
        $columnas[] = array(array('data' => t("No se encontraron periodos registrados."),
                                  'colspan' => '7'));
	
    /* crea la tabla */
    $salida .= theme('table', $cabecera, $columnas);

    /* muestra los elementos de paginación */
    if($form['paginador']['#value'])
        $salida .= drupal_render($form['pager']);

    /* muestra los elementos restantes que no han sido procesados */
    $salida .= drupal_render($form);
    
    /* regresa código HTML */
   return $salida;
}



?>
